package gladiatormanager;

import java.awt.Point;
import java.util.ArrayList;
import org.newdawn.slick.Image;

public class Gladiaattori {
    public static ArrayList<Gladiaattori> punaisetGladiaattorit;
    public static ArrayList<Gladiaattori> sinisetGladiaattorit;
    private Image kuva;
    private int elamapisteet, maxelamapisteet, maxactionpisteet, voima;
    private int actionpisteet;
    private int kunto, tiimi;
    private Reppu reppu;
    private boolean lyo;//Lyö (True/False)
    
    
    public Gladiaattori(int joukkue, int voima, int kunto, int actionpisteet, int elamapisteet, Image kuva) {
        punaisetGladiaattorit = new ArrayList<Gladiaattori>();
        sinisetGladiaattorit = new ArrayList<Gladiaattori>();
        reppu = new Reppu();
        this.kuva = kuva;
        this.elamapisteet = elamapisteet;
        maxelamapisteet = elamapisteet;
        this.actionpisteet = actionpisteet;
        maxactionpisteet = actionpisteet;
        this.voima = voima;
        this.kunto = kunto;
        tiimi = joukkue;
        lyo = true;
        if (joukkue == Joukkue.PUNAINEN) punaisetGladiaattorit.add(this);
        if (joukkue == Joukkue.SININEN) sinisetGladiaattorit.add(this);
    }
    
    
    public boolean getLyo() {
        return lyo;
    }
    
    public int getKantomatka() {
        return Math.max(reppu.getKantomatka(), 2);
    }
    
    public void setLyo(boolean lyo) {
        this.lyo = lyo;
    }
    
    public Gladiaattori(int joukkue, int voima, int kunto, int actionpisteet, int elamapisteet, Reppu reppu, Image kuva) {
        punaisetGladiaattorit = new ArrayList<Gladiaattori>();
        sinisetGladiaattorit = new ArrayList<Gladiaattori>();
        if (reppu == null) {
            this.reppu = new Reppu();
        } else this.reppu = reppu;
        this.kuva = kuva;
        this.elamapisteet = elamapisteet;
        maxelamapisteet = elamapisteet;
        this.actionpisteet = actionpisteet;
        maxactionpisteet = actionpisteet;
        this.voima = voima;
        this.kunto = kunto;
        tiimi = joukkue;
        if (joukkue == Joukkue.PUNAINEN) punaisetGladiaattorit.add(this);
        if (joukkue == Joukkue.SININEN) sinisetGladiaattorit.add(this);
    }
    
    public void lisaaTavara(PuettavaTavara tavara, boolean puettuna) {
        reppu.lisaaTavara(tavara, puettuna);
    }
    
    public boolean iskeGladiaattoria(Gladiaattori gladiaattori) {
        return gladiaattori.vahennaElamia(5+Math.max(0, this.voima+this.reppu.getVoima()-gladiaattori.reppu.getSuojaus()));
    }
    
    @Override
    public String toString() {
        return "Team:"+tiimi+
                "\nStrength:"+voima+
                "\nStamina:"+kunto+
                "\n\nLife Points:"+elamapisteet+"/"+maxelamapisteet+
                "\nAction Points:"+actionpisteet+"/"+maxactionpisteet+""+
                "\n  -Moving "+getLiikkumisKustannus()+
                "\n  -Hitting "+getLyontiKustannus();
    }

    public int getLiikkumisVara() {
        if (lyo) return actionpisteet-this.getLyontiKustannus();
        else return actionpisteet;
    }
    
    public int getLiikkumisKustannus() {
        return 3+(int)Math.round((reppu.getPaino()*2.0+5)/(5+kunto));
    }
    
    public int getLyontiKustannus() {
        return 5+Math.round((reppu.getLyontikustannus()));
    }
    
    public Reppu getReppu() {
        return reppu;
    }
    
    public int getVoima() {
        return voima;
    }
    
    public int getKunto() {
        return kunto;
    }
    
    public int getActionPisteet() {
        return actionpisteet;
    }
    
    public boolean vahennaActionPisteita(int maara) {
        if (maara > actionpisteet) return false;
        actionpisteet -= maara;
        return true;
    }
    
    public void lisaaActionPisteita(int maara) {
        actionpisteet = Math.min(maxactionpisteet, actionpisteet+maara);
    }
    
    public int getMaxActionPisteet() {
        return maxactionpisteet;
    }
    
    public int getConstitution() {
        return elamapisteet;
    }
    
    public boolean vahennaElamia(int maara) {
        elamapisteet = Math.max(0, elamapisteet-maara);
        if (elamapisteet == 0) {
            if (this.tiimi == Joukkue.PUNAINEN) {
                punaisetGladiaattorit.remove(this);
            }
            if (this.tiimi == Joukkue.SININEN) {
                sinisetGladiaattorit.remove(this);
            }
            return false;
        }
        return true;
    }
    
    public int getMaxConstitution() {
        return maxelamapisteet;
    }
    
    public void setJoukkue(int joukkue) {
        if (tiimi == Joukkue.PUNAINEN) {
            punaisetGladiaattorit.remove(this);
        }
        if (tiimi == Joukkue.SININEN) {
            sinisetGladiaattorit.remove(this);
        }
        tiimi = joukkue;
        if (joukkue == Joukkue.PUNAINEN) punaisetGladiaattorit.add(this);
        if (joukkue == Joukkue.SININEN) sinisetGladiaattorit.add(this);
    }
    
    public int getJoukkue() {
        return tiimi;
    }
    
    public Image getImage() {
        return kuva;
    }

}
